//!导入所需模块
import axios, {
  type InternalAxiosRequestConfig, //内部请求配置类型（axios 提供）
  type AxiosError, //定义 axios 请求错误类型
} from 'axios';
//!创建 Axios 实例
const instance = axios.create({
  timeout: 2000,
});
//!http request 请求拦截器----request.use: 请求前的拦截逻辑
instance.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    //设置请求头
    config.headers.set('Content-Type', 'application/json');
    if (config.method == 'post') {
      config.data = JSON.stringify(config.data);
    }
    return config;
  },
  //如果请求配置发生错误，将错误抛出
  (error: AxiosError) => {
    Promise.reject(error);
  },
);
//!http response 响应拦截器----response.use: 响应后的拦截逻辑
instance.interceptors.response.use(
  (response) => {
    //响应成功时做一些处理
    return response.status == 200 ? Promise.resolve(response) : Promise.reject(response);
  },
  (error) => {
    const { response } = error;
    errorHanld(response.status, response.info);
  },
);
//!封装失败状态码
const errorHanld = (status: number, info: string) => {
  switch (status) {
    case 400:
      console.log('语义有误');
      break;
    case 401:
      console.log('服务器认证');
      window.location.href = '/LogoinView'; //如果是401，可能是未授权，跳转到登录页面
      break;
    case 402:
      console.log('服务器拒绝访问');
      break;
    case 403:
      console.log('地址有误');
      break;
    case 500:
      console.log('服务器遇到意外');
      break;
    case 502:
      console.log('服务器无响应');
      break;
    default:
      console.log(info);
      break;
  }
};

export default instance
